#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
用户体系字典数据初始化脚本
运行命令：python init_user_dictionaries.py
"""

import sys
import os
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

from app import create_app, db
from app.models.dictionary import DictCategory, DictItem

def init_user_dictionaries():
    """初始化用户体系相关的字典数据"""
    
    # 创建应用上下文
    app = create_app()
    with app.app_context():
        
        # 定义字典数据结构
        dict_data = {
            # 1. 学历字典
            'education': {
                'name': '学历',
                'items': [
                    {'name': '初中及以下', 'value': 'junior_high'},
                    {'name': '高中/中专', 'value': 'high_school'},
                    {'name': '大专', 'value': 'college'},
                    {'name': '本科', 'value': 'bachelor'},
                    {'name': '硕士', 'value': 'master'},
                    {'name': '博士及以上', 'value': 'phd'},
                ]
            },
            
            # 2. 婚姻状况字典
            'marital_status': {
                'name': '婚姻状况',
                'items': [
                    {'name': '未婚', 'value': 'single'},
                    {'name': '离异未育', 'value': 'divorced_no_child'},
                    {'name': '离异有孩子', 'value': 'divorced_with_child'},
                    {'name': '丧偶', 'value': 'widowed'},
                    {'name': '其他', 'value': 'other'},
                ]
            },
            
            # 3. 职业字典
            'occupation': {
                'name': '职业',
                'items': [
                    {'name': '上班一族', 'value': 'office_worker'},
                    {'name': '求职中', 'value': 'job_seeking'},
                    {'name': '公司高管', 'value': 'executive'},
                    {'name': '自由职业', 'value': 'freelancer'},
                    {'name': '学生', 'value': 'student'},
                    {'name': '退休', 'value': 'retired'},
                    {'name': '其他', 'value': 'other'},
                ]
            },
            
            # 4. 收入范围字典
            'income_range': {
                'name': '收入范围',
                'items': [
                    {'name': '1000元以下', 'value': 'under_1k'},
                    {'name': '1000-3000元', 'value': '1k_3k'},
                    {'name': '3000-5000元', 'value': '3k_5k'},
                    {'name': '5000-8000元', 'value': '5k_8k'},
                    {'name': '8000-12000元', 'value': '8k_12k'},
                    {'name': '12000-20000元', 'value': '12k_20k'},
                    {'name': '20000元以上', 'value': 'over_20k'},
                    {'name': '不愿透露', 'value': 'private'},
                ]
            },
            
            # 5. 购房情况字典
            'housing_status': {
                'name': '购房情况',
                'items': [
                    {'name': '未购房', 'value': 'no_house'},
                    {'name': '已购房且无贷款', 'value': 'own_house_no_loan'},
                    {'name': '已购房但有贷款', 'value': 'own_house_with_loan'},
                    {'name': '有房产但不是婚房', 'value': 'have_property_not_wedding'},
                    {'name': '家庭有房产', 'value': 'family_property'},
                    {'name': '其他', 'value': 'other'},
                ]
            },
            
            # 6. 购车情况字典
            'car_status': {
                'name': '购车情况',
                'items': [
                    {'name': '未购车', 'value': 'no_car'},
                    {'name': '已购车', 'value': 'own_car'},
                    {'name': '有购车计划', 'value': 'plan_to_buy'},
                    {'name': '家庭有车', 'value': 'family_car'},
                    {'name': '不需要车', 'value': 'no_need'},
                    {'name': '其他', 'value': 'other'},
                ]
            },
            
            # 7. 吸烟习惯字典
            'smoking_habit': {
                'name': '吸烟习惯',
                'items': [
                    {'name': '不吸烟', 'value': 'no_smoking'},
                    {'name': '偶尔吸烟', 'value': 'occasionally'},
                    {'name': '经常吸烟', 'value': 'frequently'},
                    {'name': '已戒烟', 'value': 'quit_smoking'},
                    {'name': '其他', 'value': 'other'},
                ]
            },
            
            # 8. 饮酒习惯字典
            'drinking_habit': {
                'name': '饮酒习惯',
                'items': [
                    {'name': '不喝酒', 'value': 'no_drinking'},
                    {'name': '偶尔喝酒', 'value': 'occasionally'},
                    {'name': '经常喝酒', 'value': 'frequently'},
                    {'name': '应酬喝酒', 'value': 'business_only'},
                    {'name': '聚会喝酒', 'value': 'social_only'},
                    {'name': '已戒酒', 'value': 'quit_drinking'},
                    {'name': '其他', 'value': 'other'},
                ]
            },
            
            # 9. 性格特征字典
            'personality_traits': {
                'name': '性格特征',
                'items': [
                    {'name': '浪漫迷人', 'value': 'romantic'},
                    {'name': '成熟稳重', 'value': 'mature'},
                    {'name': '风趣幽默', 'value': 'humorous'},
                    {'name': '温柔体贴', 'value': 'gentle'},
                    {'name': '活泼开朗', 'value': 'lively'},
                    {'name': '内敛安静', 'value': 'quiet'},
                    {'name': '独立自强', 'value': 'independent'},
                    {'name': '善解人意', 'value': 'understanding'},
                    {'name': '乐观向上', 'value': 'optimistic'},
                    {'name': '其他', 'value': 'other'},
                ]
            },
            
            # 10. 兴趣爱好字典
            'hobbies': {
                'name': '兴趣爱好',
                'items': [
                    {'name': '音乐', 'value': 'music'},
                    {'name': '影视', 'value': 'movies'},
                    {'name': '数码', 'value': 'digital'},
                    {'name': '运动健身', 'value': 'fitness'},
                    {'name': '旅游', 'value': 'travel'},
                    {'name': '美食', 'value': 'food'},
                    {'name': '读书', 'value': 'reading'},
                    {'name': '摄影', 'value': 'photography'},
                    {'name': '游戏', 'value': 'gaming'},
                    {'name': '手工艺', 'value': 'handicraft'},
                    {'name': '舞蹈', 'value': 'dancing'},
                    {'name': '绘画', 'value': 'painting'},
                    {'name': '其他', 'value': 'other'},
                ]
            },
            
            # 11. 收入要求字典（择偶条件）
            'income_requirement': {
                'name': '收入要求',
                'items': [
                    {'name': '收入不限', 'value': 'no_limit'},
                    {'name': '1000元以下', 'value': 'under_1k'},
                    {'name': '1000-3000元', 'value': '1k_3k'},
                    {'name': '3000-5000元', 'value': '3k_5k'},
                    {'name': '5000-8000元', 'value': '5k_8k'},
                    {'name': '8000-12000元', 'value': '8k_12k'},
                    {'name': '12000-20000元', 'value': '12k_20k'},
                    {'name': '20000元以上', 'value': 'over_20k'},
                ]
            },
            
            # 12. 学历要求字典（择偶条件）
            'education_requirement': {
                'name': '学历要求',
                'items': [
                    {'name': '初中及以下', 'value': 'junior_high'},
                    {'name': '高中/中专', 'value': 'high_school'},
                    {'name': '大专', 'value': 'college'},
                    {'name': '本科', 'value': 'bachelor'},
                    {'name': '硕士', 'value': 'master'},
                    {'name': '博士及以上', 'value': 'phd'},
                ]
            },
            
            # 13. 职业要求字典（择偶条件）
            'occupation_requirement': {
                'name': '职业要求',
                'items': [
                    {'name': '上班一族', 'value': 'office_worker'},
                    {'name': '求职中', 'value': 'job_seeking'},
                    {'name': '公司高管', 'value': 'executive'},
                    {'name': '自由职业', 'value': 'freelancer'},
                    {'name': '学生', 'value': 'student'},
                    {'name': '其他', 'value': 'other'},
                ]
            },
            
            # 14. 婚姻要求字典（择偶条件）
            'marital_requirement': {
                'name': '婚姻要求',
                'items': [
                    {'name': '未婚', 'value': 'single'},
                    {'name': '离异未育', 'value': 'divorced_no_child'},
                    {'name': '离异有孩子', 'value': 'divorced_with_child'},
                    {'name': '其他', 'value': 'other'},
                ]
            },
            
            # 15. 住房要求字典（择偶条件）
            'housing_requirement': {
                'name': '住房要求',
                'items': [
                    {'name': '住房不限', 'value': 'no_limit'},
                    {'name': '愿意和父母同住', 'value': 'live_with_parents'},
                    {'name': '要有独立婚房', 'value': 'independent_house'},
                    {'name': '有房最好', 'value': 'prefer_house'},
                    {'name': '必须有房产', 'value': 'must_have_house'},
                    {'name': '其他', 'value': 'other'},
                ]
            },
            
            # 16. 吸烟要求字典（择偶条件）
            'smoking_requirement': {
                'name': '吸烟要求',
                'items': [
                    {'name': '吸烟不限', 'value': 'no_limit'},
                    {'name': '不接受吸烟', 'value': 'no_smoking'},
                    {'name': '可以偶尔吸烟', 'value': 'occasionally_ok'},
                    {'name': '完全不能吸烟', 'value': 'absolutely_no'},
                    {'name': '其他', 'value': 'other'},
                ]
            },
            
            # 17. 饮酒要求字典（择偶条件）
            'drinking_requirement': {
                'name': '饮酒要求',
                'items': [
                    {'name': '喝酒不限', 'value': 'no_limit'},
                    {'name': '不接受喝酒', 'value': 'no_drinking'},
                    {'name': '可以偶尔小酌', 'value': 'occasionally_ok'},
                    {'name': '应酬可以', 'value': 'business_ok'},
                    {'name': '完全不能喝酒', 'value': 'absolutely_no'},
                    {'name': '其他', 'value': 'other'},
                ]
            },
        }
        
        print("开始初始化用户体系字典数据...")
        
        # 遍历字典数据进行初始化
        for dict_code, dict_info in dict_data.items():
            # 检查字典分类是否已存在
            category = DictCategory.query.filter_by(dict_code=dict_code).first()
            
            if not category:
                # 创建字典分类
                category = DictCategory(
                    dict_name=dict_info['name'],
                    dict_code=dict_code,
                    sort_order=len(DictCategory.query.all()) + 1,
                    remark=f'用户体系-{dict_info["name"]}配置',
                    is_active=True
                )
                db.session.add(category)
                db.session.flush()  # 获取ID
                print(f"✅ 创建字典分类: {dict_info['name']} ({dict_code})")
            else:
                print(f"📋 字典分类已存在: {dict_info['name']} ({dict_code})")
            
            # 创建字典项
            for index, item_info in enumerate(dict_info['items']):
                # 检查字典项是否已存在
                existing_item = DictItem.query.filter_by(
                    dict_id=category.id,
                    item_value=item_info['value']
                ).first()
                
                if not existing_item:
                    item = DictItem(
                        dict_id=category.id,
                        item_name=item_info['name'],
                        item_value=item_info['value'],
                        sort_order=index + 1,
                        is_active=True,
                        remark=f'{dict_info["name"]}选项'
                    )
                    db.session.add(item)
                    print(f"  ➕ 创建字典项: {item_info['name']} ({item_info['value']})")
                else:
                    print(f"  📄 字典项已存在: {item_info['name']} ({item_info['value']})")
        
        # 提交所有更改
        try:
            db.session.commit()
            print("✅ 所有字典数据初始化完成！")
            
            # 统计信息
            total_categories = DictCategory.query.count()
            total_items = DictItem.query.count()
            print(f"📊 统计信息: 共 {total_categories} 个字典分类, {total_items} 个字典项")
            
        except Exception as e:
            db.session.rollback()
            print(f"❌ 初始化失败: {str(e)}")
            return False
        
        return True

def check_dictionaries():
    """检查字典数据的完整性"""
    app = create_app()
    with app.app_context():
        print("\n📋 检查字典数据完整性...")
        
        expected_categories = [
            'education', 'marital_status', 'occupation', 'income_range',
            'housing_status', 'car_status', 'smoking_habit', 'drinking_habit',
            'personality_traits', 'hobbies', 'income_requirement',
            'education_requirement', 'occupation_requirement', 'marital_requirement',
            'housing_requirement', 'smoking_requirement', 'drinking_requirement'
        ]
        
        missing_categories = []
        for category_code in expected_categories:
            category = DictCategory.query.filter_by(dict_code=category_code).first()
            if not category:
                missing_categories.append(category_code)
            else:
                item_count = category.dict_items.count()
                print(f"✅ {category.dict_name} ({category_code}): {item_count} 个选项")
        
        if missing_categories:
            print(f"❌ 缺少字典分类: {', '.join(missing_categories)}")
            return False
        else:
            print("✅ 所有必需的字典分类都已创建")
            return True

if __name__ == '__main__':
    # 初始化字典数据
    success = init_user_dictionaries()
    
    if success:
        # 检查数据完整性
        check_dictionaries()
    else:
        print("❌ 字典数据初始化失败")
        sys.exit(1) 